/**
 * @Author: wind
 * @Date: 2011/9/22
 * @Desc: google搜索控件
 * @class Tm.common.GoogleSearchField
 * @extends Ext.form.ComboBox
 */
Ext.ns('Tm.common');
// ----------------------事件-------------------------------------:
GoogleSearchField_EVENT = {
	/**
	 * @event enterKey 当按下回车键的时候激活
	 * @param {Tm.common.GoogleSearchField}
	 * 
	 */
	enterKey : 'enterKey'
};
Tm.common.GoogleSearchField = Ext.extend(Ext.form.ComboBox, {
			// ----------------------属性-------------------------------------:
			/**
			 * @cfg 默认宽度
			 * @type String
			 */
			width : 250,
			/**
			 * @cfg 值为空时显示的文字
			 * @type String
			 */
			emptyText : '请输入...',
			/**
			 * @cfg 查询时显示的文字
			 * @type String
			 */
			loadingText : '查询中...',
			/**
			 * @cfg 被激活之前用户必须输入的字符数
			 * @type Number
			 */
			minChars : 1,
			/**
			 * @cfg 值为true时在经过指定延迟（typeAheadDelay）后弹出并自动选择输入的文本
			 * @type Boolean
			 */
			typeAhead : true,
			/**
			 * @cfg 以毫秒表示的 typeahead 文本延迟显示量，仅当 typeAhead = true 时生效（默认为 250）。
			 * @type Number
			 */
			typeAheadDelay : 250,
			/**
			 * @cfg 供查询时传递的变量名。
			 * @type String
			 */
			queryParam : 'queryParam',
			/**
			 * @cfg {Boolean} hideTrigger <tt>true</tt> 隐藏下拉框 (defaults to <tt>true</tt>)
			 */
			hideTrigger : true,

			forceSelection : true,
			/**
			 * @cfg 后台的值
			 * @type String
			 */
			valueField:'key',
			/**
			 * @cfg 默认显示的record值
			 * @type String
			 */
			displayField : 'value',
			/**
			 * @cfg {Boolean} iconRight <tt>true</tt> 设置图片是否在左边(defaults to <tt>true</tt>)
			 * @type Boolean
			 */
			iconRight : true,
			/**
			 * @cfg 设置查询keyword的url
			 * @type String
			 */
			queryURL : '',
			
			dataId : null,
			
			
			// ----------------------私有方法-------------------------------------:
			/**
			 * 查询栏目 初始化例子:
			 * 
			 * <pre><code>
			 * var search = new Tm.common.GoogleSearchField({
			 * 			queryURL : '../../src/common/data/keyword.json',
			 * 			iconRight : false,
			 * 			typeAhead : true,
			 * 			typeAheadDelay : 4,
			 * 			listeners : {
			 * 				enterKey : function(field) {
			 * 					alert(field.getValue());
			 * 				}
			 * 			}
			 * 		});
			 * </code></pre>
			 */
			// private
			initComponent : function() {
				var store = new Ext.data.JsonStore({
							url : this.queryURL,
							fields : [{
								name : 'key'
							},{
								name : 'value'
							}]
						});
				Ext.apply(this, {
							store : store
						});
				Tm.common.GoogleSearchField.superclass.initComponent.call(this);
				this.addEvents(GoogleSearchField_EVENT.enterKey);
				this.on('specialkey', this.enterKeyHandler);
			},
			// private
//			onRender : function(ct, position) {
//				this.cls = this.iconRight ? 'keywordsearch-icon-right' : 'keywordsearch-icon-left';
//				Tm.common.GoogleSearchField.superclass.onRender.call(this, ct, position);
//			},
			setValue : function(v) {
				v = (v && v.toString) ? v.toString() : v;
				if (v&&!this.store.isLoaded ) {
				this.store.addListener('beforeload', function() {
					Ext.apply(this.store.baseParams, {'key':v});
				}, this);
				this.store.addListener('load', function() {
					this.store.isLoaded = true;
					this.setValue(v);
				}, this);
				this.store.load();
				}else{
					Tm.common.GoogleSearchField.superclass.setValue.call(this, v);
	
				}
			},
			
			/**
			 * 处理回车键的事件
			 * 
			 * @param {Tm.common.GoogleSearchField}
			 */
			// private
			enterKeyHandler : function(field, event) {
				if (event.getKey() == event.ENTER) {
					this.fireEvent(GoogleSearchField_EVENT.enterKey, this);
				}
			}
		});
Ext.reg('googlesearchfield', Tm.common.GoogleSearchField);
